// var sumDigitDifferences = function(nums) {
//   const len = nums.length;
//   let ans = 0;
//   if (len <= 1) {
//     return ans;
//   } 

//   for (let i = 0; i < len; i++) {
//     for (let j = i + 1; j < len; j++) {
//       let temp = isDiff(nums[i], nums[j]);
//       ans += temp;
//     }
//   }

//   return ans;

// };

// function isDiff(num1, num2) {
//   let res = 0;

//   while (num1 && num2) {
//     let a = num1 % 10, b = num2 % 10;
//     if (a !== b) {
//       res++;
//     }
//     num1 = Math.floor(num1 / 10), num2 =  Math.floor(num2 / 10);
//   }
//   return res;
// }

const nums = [10,10,10];
console.log(sumDigitDifferences(nums))

// 上面方法超时了

function sumDigitDifferences(nums) {
  // 统计各个位上各个数字出现的频率
  const map = new Array(10).fill(0).map(() => new Array(10).fill(0));
  
  // 计算每位上数字的频率
  for (const num of nums) {
    let n = num;
    let startIndex = 0;
    while(n) {
      let temp = n % 10;
      map[startIndex][temp]++;
      n = Math.floor(n / 10);
      startIndex++;
    }
  }

  let ans = 0;

  // 外层：数字的长度
  for (let i = 0; i < 10; i++) {
    // 某位（个、十、百）上各个数字（0-9）出现的频率
    for (let j = 0; j < 10; j++) {
      for (let k = j + 1; k < 10; k++) {
        ans += map[i][j] * map[i][k];
      }
    }
  }
  return ans;

}